package com.fivestar.finance.app.injector.components;


import android.content.Context;

import com.fivestar.finance.app.FFApplication;
import com.fivestar.finance.app.api.CommonApi;
import com.fivestar.finance.app.api.UserApi;
import com.fivestar.finance.app.greendao.UserResponseDao;
import com.fivestar.finance.app.injector.module.ApiModule;
import com.fivestar.finance.app.injector.module.ApplicationModule;
import com.fivestar.finance.app.injector.module.DBModule;
import com.fivestar.finance.app.ui.BaseActivity;

import javax.inject.Singleton;

import dagger.Component;

/**
 * APP组件，可以理解为一个应用级别的注入器，生命周期跟Application一样的组件，是@Inject(使用方)和@Module(提供方)的桥梁
 * Component注解一个接口
 *
 * @Singletion代表各个注入对象为单例。 Created by derek on 2016/3/18.
 */
//使用了@Singleton注解，使其保证唯一性
@Singleton
//3.标注一个Component，用来只是我是生成的实例，用户到时候用的是这个。modules 标记这个Component会将哪些Module里面的提供类提供类生成出来。
// 它使用在组件里面标记使用的Module（标记用到了哪个Module，主要是看使用方需要哪些对象进行构造，然后将它的提供方@module写在这里）
@Component(modules = {ApplicationModule.class, ApiModule.class, DBModule.class})
public interface ApplicationComponent {

    //4.inject 函数意思是，哪些需要注入，就写一个这个接口哦即可
    void inject(FFApplication application);

    void inject(BaseActivity mBaseActivity);

    /**
     * 提供Applicaiton的Context
     *
     * @return
     */
    Context getContext();

    UserApi getUserApi();

    CommonApi provideCommonApi();

    UserResponseDao getUserResponseDao();

}